/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.dew.profesoresparticulares.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import pe.edu.upc.dew.profesoresparticulares.model.Curso;
import pe.edu.upc.dew.profesoresparticulares.model.Horario;
import pe.edu.upc.dew.profesoresparticulares.model.Usuario;
import pe.edu.upc.dew.profesoresparticulares.service.ComunService;
import pe.edu.upc.dew.profesoresparticulares.service.CursoService;
import pe.edu.upc.dew.profesoresparticulares.service.HoraService;
import pe.edu.upc.dew.profesoresparticulares.service.HorarioService;
import pe.edu.upc.dew.profesoresparticulares.service.UsuarioService;
import pe.edu.upc.dew.profesoresparticulares.util.Constantes;

@InterceptorRefs({
    @InterceptorRef("autorizacion"),
    @InterceptorRef("alumno"),
    @InterceptorRef("defaultStack")})
public class ReservaHorarioAction  extends BaseAction{

    Logger log = Logger.getLogger(this.getClass());

    private String profesor;
    private String dia;
    private String mes;
    private String anho;
    private String curso;

    private Long codHorarioReserva;

    private ArrayList<Usuario> profesoresList;
    private ArrayList<Curso> cursosList;

    private ArrayList<HashMap<String, String>> diaList;
    private ArrayList<HashMap<String, String>> mesList;
    private ArrayList<HashMap<String, String>> anioList;

    public ArrayList<Usuario> getProfesoresList() {
        return profesoresList;
    }

    public String getCurso() {
        return curso;
    }

    public void setCurso(String curso) {
        this.curso = curso;
    }

    public void setComunService(ComunService comunService) {
        this.comunService = comunService;
    }

    public ArrayList<HashMap<String, String>> getAnioList() {
        return anioList;
    }

    public void setAnioList(ArrayList<HashMap<String, String>> anioList) {
        this.anioList = anioList;
    }

    public ArrayList<HashMap<String, String>> getDiaList() {
        return diaList;
    }

    public void setDiaList(ArrayList<HashMap<String, String>> diaList) {
        this.diaList = diaList;
    }

    public ArrayList<HashMap<String, String>> getMesList() {
        return mesList;
    }

    public void setMesList(ArrayList<HashMap<String, String>> mesList) {
        this.mesList = mesList;
    }

    public void setProfesoresList(ArrayList<Usuario> profesoresList) {
        this.profesoresList = profesoresList;
    }

    @Autowired
    private HorarioService horarioService;
    @Autowired
    private CursoService cursoService;
    @Autowired
    private HoraService horaService;
    @Autowired
    private UsuarioService usuarioService;
    @Autowired
    private ComunService comunService;

    public void setCursoService(CursoService cursoService) {
        this.cursoService = cursoService;
    }

    public void setUsuarioService(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

    public void setHoraService(HoraService horaService) {
        this.horaService = horaService;
    }

    public void setHorarioService(HorarioService horarioService) {
        this.horarioService = horarioService;
    }

    public Long getCodHorarioReserva() {
        return codHorarioReserva;
    }

    public void setCodHorarioReserva(Long codHorarioReserva) {
        this.codHorarioReserva = codHorarioReserva;
    }

    public ArrayList<Curso> getCursosList() {
        return cursosList;
    }

    public void setCursosList(ArrayList<Curso> cursosList) {
        this.cursosList = cursosList;
    }


    public String getDia() {
        return dia;
    }

    public void setDia(String dia) {
        this.dia = dia;
    }

    public String getAnho() {
        return anho;
    }

    public void setAnho(String anho) {
        this.anho = anho;
    }

    public String getMes() {
        return mes;
    }

    public void setMes(String mes) {
        this.mes = mes;
    }


    public String getProfesor() {
        return profesor;
    }

    public void setProfesor(String profesor) {
        this.profesor = profesor;
    }

    @Action(value = "buscarHorarioDisponibleProfesor", results = {
        @Result(name = SUCCESS, location = "pages/realizarReservas.jsp"),
        @Result(name = INPUT, location = "pages/realizarReservas.jsp")})
    public String  buscarHorarioDisponibleProfesor(){
        log.info("entra a buscar horario disponible profesor");
        List<Horario> registrarHorario = new ArrayList<Horario>();
        registrarHorario = horarioService.getProfesorHorarioDisponibles(Integer.parseInt(profesor), anho+"-"+mes+"-"+dia);
        log.info("horarios encontrados:"+registrarHorario.size());
        log.info(" Action buscarHorarioDisponibleProfesor");
        getRequest().setAttribute("horariosDisponibles", registrarHorario);
        return SUCCESS;
    }

    @Action(value = "reservaHorarioDisponible", results = {
        @Result(name = SUCCESS, location = "pages/realizarReservas.jsp"),
        @Result(name = INPUT, location = "pages/realizarReservas.jsp")})
    public String reservarHorario(){
       Usuario objUsuario= (Usuario)getSession().getAttribute(Constantes.USUARIO);

       List<Horario> registrarHorario = horarioService.reservarHorario(codHorarioReserva, objUsuario.getCodUsuario(),objUsuario.getNomUsuario() + " " + objUsuario.getApePaterno());

       log.info("cantidad de horarios encontrados");

       getRequest().removeAttribute(Constantes.HORARIO);
       getRequest().setAttribute(Constantes.HORARIO, registrarHorario);


       getRequest().setAttribute("horariosProfesor", registrarHorario);
       getRequest().setAttribute("horariosProfesor", registrarHorario);
       return SUCCESS;

    }

    @Action(value = "PaginaRealizarReservasAlumno", results = {
        @Result(name = SUCCESS, location = "pages/realizarReservas.jsp"),
        @Result(name = INPUT, location = "pages/realizarReservas.jsp")})
    public String inicio(){
        profesoresList = usuarioService.getUsuarioProfesores();
        cursosList = cursoService.getCursos();
        diaList = comunService.getLista("dia");
        mesList = comunService.getLista("mes");
        anioList = comunService.getLista("anio");
        return SUCCESS;
    }

    public void prepare() throws Exception {
        
    }

}